package wordQueues;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Provider {

    public static void main(String[] args) throws IOException, TimeoutException {
        /**
         * 逻辑:
         * 1. 创建工厂在工厂中选定要连接的Virtual Hosts的Connection对象
         * 2. 获得Connection对象的连接通道
         * 3. 使用通道在队列中放入数据
         */

        // 创建连接RabbitMQ的连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // 设置连接RabbitMQ主机
        connectionFactory.setHost("192.168.99.100");
        // 设置端口号
        connectionFactory.setPort(5672);
        // 设置连接哪个Virtual Hosts
        connectionFactory.setVirtualHost("/wwj");
        // 设置访问Virtual Hosts的用户
        connectionFactory.setUsername("wwj");
        connectionFactory.setPassword("123456");

        // 获取连接对象(这里直接抛异常)
        Connection connection = connectionFactory.newConnection();

        // 获取连接通道
        Channel channel = connection.createChannel();

        // 通道绑定消息队列
        // 参数一:队列名称，如果队列不存在则自动创建
        // 参数二:队列是否持久化，如果选择持久化就会在磁盘中存储，在RabbitMQ重启后会自动读进来，反正再次启动就不会有该队列
        //      注意这里是队列持久化，不是消息持久化，也就是重启后会有这个队列，但队列中消息还是没有了
        //      消息持久化为channel.basicPublish参数三设为MessageProperties.PERSISTENT_TEXT_PLAIN
        // 参数三:是否为独占队列，即是否只有当前通道(Channel)能够使用该队列
        // 参数四:是否在消费完成后自动删除队列
        // 参数五:附加参数(暂不讲解)
        channel.queueDeclare("work", false, false, false, null);

        // 发布消息==>在这一步就把消息放入到消息队列中了
        // 参数一:交换机名称 work模型没有
        // 参数二:队列名称，对应channel.queueDeclare的第一个参数
        // 参数三:传递消息额外配置 (暂不使用)
        // 参数四:消息的具体内容
        for (int i = 0; i < 10; i++) {
            channel.basicPublish("", "work", null, ("work queue" + i).getBytes());
        }

        // 关闭通道，关闭连接
        channel.close();
        connection.close();

    }

}
